package sis.uitest;/*
* @auther 顶风少年 
* @mail dfsn19970313@foxmail.com
* @date 2019-08-05 17:50
* @notify 
* @version 1.0
*/

import junit.framework.TestCase;
import sis.ui.UpcaseFilter;

import javax.swing.text.*;

public class UpcaseFilterTest extends TestCase {
    //过滤器
    private DocumentFilter filter;
    //执行文件过滤的类.
    protected DocumentFilter.FilterBypass bypass;
    //文档
    protected AbstractDocument document;

    protected void setUp(){
        //执行文件过滤的类.
        bypass = createBypass();
        //获取一个空白文档
        document = (AbstractDocument)bypass.getDocument();
        //过滤器
        filter = new UpcaseFilter();
    }

    //测试添加
    public void testInsert()throws BadLocationException{
        //从0个字符开始替换
        filter.insertString(bypass,0,"abc",null);
        assertEquals("ABC",documentText());
        //从1个字符开始替换
        filter.insertString(bypass,1,"def",null);
        assertEquals("ADEFBC",documentText());
    }

    //测试替换
    public void testReplace()throws BadLocationException{
        filter.insertString(bypass,0,"XYZ",null);
        filter.replace(bypass,1,2,"tc",null);
        assertEquals("XTC",documentText());

        filter.replace(bypass,0,3,"p8A",null);
        assertEquals("P8A",documentText());
    }

    //获取文档内容
    protected String documentText()throws BadLocationException{
        return document.getText(0,document.getLength());
    }

    //执行文件过滤的类.
    protected DocumentFilter.FilterBypass createBypass(){
        return new DocumentFilter.FilterBypass(){
            //一个空的文本对象
            private AbstractDocument document = new PlainDocument();
            //返回发生突变的文档。
            public Document getDocument(){
                return document;
            }
            //插入指定的文本，绕过DocumentFilter
         /*   offset - 插入内容> = 0的文档的偏移量。在给定位置或之后跟踪更改的所有位置将移动。
            string - 要插入的字符串
            attr - 与插入的内容关联的属性。 如果没有属性，则可能为null。*/

            public void insertString(int offset,String string,AttributeSet attr){
                try{
                    document.insertString(offset,string,attr);
                }catch (BadLocationException e){}
            }
            //删除指定的文本区域，绕过DocumentFilter。
            public void remove(int offset,int length){}
            //将文本区域从 offset删除为 offset + length ，并将其替换为 text 。
            public void replace(int offset,int length,String string,AttributeSet attr){
                try {
                    document.replace(offset,length,string,attr);
                }catch (Exception e){}
            }
        };
    }
}
